#!/usr/bin env python
# -*- coding: utf-8 -*-
###########################################################################
#   Copyright (C) 2008 by Serj Poltavsky                                  #
#   serge.uliss at gmail.com                                              #
#                                                                         #
#   This program is free software; you can redistribute it and/or modify  #
#   it under the terms of the GNU General Public License as published by  #
#   the Free Software Foundation; either version 3 of the License, or     #
#   (at your option) any later version.                                   #
#                                                                         #
#   This program is distributed in the hope that it will be useful,       #
#   but WITHOUT ANY WARRANTY; without even the implied warranty of        #
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         #
#   GNU General Public License for more details.                          #
#                                                                         #
#   You should have received a copy of the GNU General Public License     #
#   along with this program. If not, see <http://www.gnu.org/licenses/>   #
###########################################################################

import os
import sys
import subprocess

from convert import Convert

class Multiplex(Convert):
    def __init__(self, video, sound, dest):
        Convert.__init__(self, None, dest)
        self.video = video
        self.sound = sound

    def convert(self):
        cmd = ['mplex', '-f', '8', '-o', self.dest, self.video, self.sound]
        if __debug__:
            print >>sys.stderr, "Multiplexing menu..."
            print >>sys.stderr, " ".join(cmd)

        try:
            ret = subprocess.call(cmd, stderr = subprocess.PIPE, stdout = subprocess.PIPE)
            if ret != 0:
                print >>sys.stderr, "Multiplex faild with code %i" % (ret)
        except OSError, e:
            print >>sys.stderr, "Multiplex execution failed:", e

    def is_converted(self):
        return self.is_dest_exists() and not self.is_dest_older()

    def is_dest_older(self):
        dest_mtime = os.stat(self.dest).st_mtime
        video_mtime = os.stat(self.video).st_mtime
        sound_mtime = os.stat(self.sound).st_mtime
        return (dest_mtime < video_mtime) or (dest_mtime < sound_mtime)